Priority এবং Expiration ব্যবহার করে Message Handling

Java Technologies - অ্যাপাচি অ্যাকটিভএমকিউ (Apache ActiveMQ) Message Selectors এবং Filters |
131
131

অ্যাপাচি অ্যাকটিভএমকিউ (Apache ActiveMQ) একটি শক্তিশালী মেসেজ ব্রোকার যা মেসেজিং সিস্টেমের মধ্যে উচ্চ কার্যকারিতা এবং ফ্লেক্সিবিলিটি প্রদান করে। মেসেজগুলির জন্য Priority (প্রায়োরিটি) এবং Expiration (এক্সপিরেশন) ব্যবহার করে, আপনি মেসেজ প্রেরণ এবং গ্রহণের প্রক্রিয়াকে আরও নির্ভুল এবং কার্যকরী করতে পারেন। এই দুটি বৈশিষ্ট্য মেসেজ হ্যান্ডলিং সিস্টেমে গুরুত্বপূর্ণ ভূমিকা পালন করে, বিশেষ করে যখন আপনাকে মেসেজের গুরুত্ব বা মেয়াদ নির্ধারণ করতে হয়।


Priority (প্রায়োরিটি) ব্যবহার করে মেসেজ হ্যান্ডলিং

Priority মেসেজ হ্যান্ডলিং ব্যবস্থায় মেসেজের গুরুত্ব বা অগ্রাধিকার নির্ধারণ করে। অ্যাপাচি অ্যাকটিভএমকিউতে মেসেজের জন্য Priority ব্যবহার করলে, আপনি মেসেজগুলির প্রক্রিয়াকরণে অগ্রাধিকার দিতে পারবেন। মেসেজের প্রাথমিক উদ্দেশ্য হল, যদি কোনো কিউতে একাধিক মেসেজ থাকে, তবে উচ্চ_PRIORITY মেসেজগুলি প্রথমে প্রক্রিয়া করা হবে।

Priority কীভাবে কাজ করে?

অ্যাপাচি অ্যাকটিভএমকিউতে প্রতিটি মেসেজের একটি priority (0 থেকে 9 এর মধ্যে) থাকে:

  • 0 হলো সর্বনিম্ন_PRIORITY, এবং
  • 9 হলো সর্বোচ্চ_PRIORITY।

যখন একটি মেসেজ কিউতে জমা হয়, তখন এটি কিউতে অন্যান্য মেসেজের তুলনায় বেশি_PRIORITY মেসেজ হিসেবে এগিয়ে যাবে, এবং আগে প্রক্রিয়া করা হবে। এটি গুরুত্বপূর্ণ যখন আপনি কিছু মেসেজকে দ্রুত প্রক্রিয়া করতে চান, যেমন জরুরি বা অগ্রাধিকারের কাজ।

Priority সেট করার উদাহরণ

import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.*;

public class PriorityMessageProducer {
    public static void main(String[] args) throws JMSException {
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
        Connection connection = connectionFactory.createConnection();
        connection.start();

        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        Destination destination = session.createQueue("PriorityQueue");

        MessageProducer producer = session.createProducer(destination);
        
        // Set Priority (higher value means higher priority)
        producer.setPriority(9); // Highest priority
        
        TextMessage message = session.createTextMessage("This is a high priority message");
        
        producer.send(message);
        System.out.println("Message sent with priority: " + message.getJMSPriority());

        connection.close();
    }
}

এখানে, setPriority(9) ব্যবহার করে মেসেজের উচ্চ_PRIORITY (9) সেট করা হয়েছে। এর ফলে, এই মেসেজটি অন্যান্য মেসেজগুলোর তুলনায় আগে প্রক্রিয়া হবে।

Priority Consumer Handling

import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.*;

public class PriorityMessageConsumer {
    public static void main(String[] args) throws JMSException {
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
        Connection connection = connectionFactory.createConnection();
        connection.start();

        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        Destination destination = session.createQueue("PriorityQueue");

        MessageConsumer consumer = session.createConsumer(destination);

        Message message = consumer.receive();
        if (message instanceof TextMessage) {
            TextMessage textMessage = (TextMessage) message;
            System.out.println("Received message with priority: " + textMessage.getJMSPriority());
            System.out.println("Message: " + textMessage.getText());
        }

        connection.close();
    }
}

এই কোডে কনজিউমার কিউ থেকে মেসেজ গ্রহণ করে এবং মেসেজের priority বের করে।


Expiration (এক্সপিরেশন) ব্যবহার করে মেসেজ হ্যান্ডলিং

Expiration মেসেজের মেয়াদ বা মেয়াদ শেষ হওয়া নির্ধারণ করে। এটি মেসেজের জন্য একটি নির্দিষ্ট সময়কাল নির্ধারণ করতে সহায়তা করে, যার পরে মেসেজটি কিউ থেকে মুছে যাবে বা অপ্রচলিত হয়ে যাবে। যদি একটি মেসেজের মেয়াদ শেষ হয়ে যায়, তবে সেটি কনজিউমারের কাছে পৌঁছানোর আগে কিউ থেকে সরিয়ে ফেলা হবে।

Expiration কীভাবে কাজ করে?

  • JMS Expiration প্রপার্টি ব্যবহার করে, আপনি মেসেজের জন্য একটি মেয়াদ (time-to-live) নির্ধারণ করতে পারেন।
  • যদি একটি মেসেজ তার নির্ধারিত সময়ের মধ্যে গ্রাহকের কাছে না পৌঁছায়, তবে সেটি কিউ থেকে সরিয়ে ফেলা হবে।

Expiration সেট করার উদাহরণ

import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.*;

public class ExpirationMessageProducer {
    public static void main(String[] args) throws JMSException {
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
        Connection connection = connectionFactory.createConnection();
        connection.start();

        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        Destination destination = session.createQueue("ExpirationQueue");

        MessageProducer producer = session.createProducer(destination);
        
        // Set expiration time (milliseconds)
        long expirationTime = 5000; // 5 seconds
        TextMessage message = session.createTextMessage("This message will expire in 5 seconds");
        
        producer.setTimeToLive(expirationTime);
        producer.send(message);
        System.out.println("Message sent with expiration time: " + expirationTime);

        connection.close();
    }
}

এখানে, setTimeToLive(5000) ব্যবহার করে মেসেজের জন্য 5 সেকেন্ডের এক্সপিরেশন সময় সেট করা হয়েছে। এর মানে হলো, ৫ সেকেন্ডের মধ্যে মেসেজ কনজিউমারের কাছে পৌঁছানোর জন্য প্রক্রিয়াকরণ না হলে, এটি কিউ থেকে সরিয়ে ফেলা হবে।

Expiration Consumer Handling

import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.*;

public class ExpirationMessageConsumer {
    public static void main(String[] args) throws JMSException {
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
        Connection connection = connectionFactory.createConnection();
        connection.start();

        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        Destination destination = session.createQueue("ExpirationQueue");

        MessageConsumer consumer = session.createConsumer(destination);

        // Receiving expired message (if any)
        Message message = consumer.receive(6000); // wait for 6 seconds

        if (message == null) {
            System.out.println("No message received or message expired.");
        } else if (message instanceof TextMessage) {
            TextMessage textMessage = (TextMessage) message;
            System.out.println("Received message: " + textMessage.getText());
        }

        connection.close();
    }
}

এই কোডে, কনজিউমার ৬ সেকেন্ড অপেক্ষা করে এবং যদি মেসেজ এক্সপায়ার্ড না হয়, তবে সেটি গ্রহণ করা হয়।


Priority এবং Expiration এর মধ্যে পার্থক্য

বৈশিষ্ট্যPriority (প্রায়োরিটি)Expiration (এক্সপিরেশন)
ফাংশনমেসেজের অগ্রাধিকার বা গুরুত্ব নির্ধারণমেসেজের মেয়াদ নির্ধারণ, মেয়াদ শেষ হলে মেসেজ মুছে ফেলা
ব্যবহারজরুরি বা গুরুত্বপূর্ণ মেসেজ আগে প্রক্রিয়া করতে ব্যবহৃতমেসেজ কিউ থেকে অপসারণের জন্য নির্দিষ্ট সময় পর মেসেজ এক্সপায়ার করা
মান0 থেকে 9 (9 সবচেয়ে বেশি)মিলিসেকেন্ডে সময় নির্ধারণ
কিউ প্রক্রিয়াসর্বোচ্চ_PRIORITY মেসেজ প্রথমে প্রক্রিয়া হয়এক্সপায়ার হওয়ার পরে মেসেজ কিউ থেকে সরিয়ে ফেলা হয়

সারাংশ

অ্যাপাচি অ্যাকটিভএমকিউ Priority এবং Expiration ব্যবহার করে মেসেজ হ্যান্ডলিং-এর কার্যক্ষমতা বাড়ানো যায়। Priority ব্যবহার করে মেসেজগুলির গুরুত্ব নির্ধারণ করা যায়, যেখানে উচ্চ_PRIORITY মেসেজগুলি আগে প্রক্রিয়া করা হয়। Expiration ব্যবহার করে, মেসেজের মেয়াদ নির্ধারণ করা হয়, এবং এক্সপায়ার হওয়ার পর মেসেজ কিউ থেকে সরিয়ে ফেলা হয়। এই দুটি বৈশিষ্ট্য মেসেজ প্রক্রিয়াকরণে আরও নিয়ন্ত্রণ এবং কার্যক্ষমতা নিয়ে আসে।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion